#include <iostream>

using namespace std;
enum Month {
    JAN, PEB, MAR
};

void bubble(int a[], int size);

int main() {
    //枚举测试
    //cout << JAN << endl;
    //一组数组
    /*int a[10];
    int index = 0;
    cout << "请输入10个整数值:";
    while (index < 10) {
        cin >> a[index];
        index++;
    }
    int sum = 0;
    for (index = 0; index < 10; index++) {
        sum += a[index];
    }
    cout << "你所输入的10个整数的和为:" << sum;*/
    //一维数组的初始化
    /*int a[5] = {11, 12, 13, 14, 15};
    for (int i = 0; i < 5; i++) {
        cout << a[i] << " ";
    }*/
    //cout << "\n";
    //初始化列表中的值可以少于数组元素个数，不足部分的数组元素被初始化成0
    /* int b[5] = {10, 20};
     for (int i = 0; i < 5; i++) {
         cout << b[i] << " ";
     }
     cout << "\n";*/
    //直接初始化
    //int c[] = {55, 65, 75, 85};
    //一维数组 的存储
    //sizeof：计算一维数组所占用的存储单元大小。
    //一维数组占用的存储单元即其所有元素所占用的存储单元的和。
    //cout << "返回存储单元的大小:" << sizeof(c) << endl;
    //返回元素个数
    //cout << "返回C的元素个数:" << sizeof(c) / sizeof(int) << endl;

    /*int array[] = {34, 91, 83, 56, 29, 93, 56, 12, 88, 72};
    float sum = 0;
    int minindex = 0;
    int size = sizeof(array) / sizeof(int);
    for (int i = 0; i < size; i++) {
        sum += array[i];
    }
    cout << "average=" << sum / size << endl;*/

    //求一个具有10个元素的数组的最大的元素值，并返回该元素的下标
    /* int a[10];
     int i = 0;
     cout << "请输入10个数组元素:";
     for (i = 0; i < 10; i++) {
         cin >> a[i];
     }
     int max = a[0];
     int index = 0;
     for (i = 0; i < 10; i++) {
         if (max < a[i]) {
             max = a[i];
             index = i;
         }
     }
     cout << "最大值为:" << max << " 下标为:" << index;*/
    /**
     * 反序输出
     */
    /*const int NUM = 20;
    int a[NUM] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
    int i, temp;
    int index=0;
    cout << "原始的数组:";
    for (i = 0; i < NUM; i++) {
        cout << a[i] << " ";
    }
    for(i=0;i<NUM/2;i++){
        temp=a[i];
        a[i]=a[NUM-i-1];
        a[NUM-i-1]=temp;
        index=i;
    }
    cout<<endl;
    //n/2-1
    cout<<"时间复杂度:"<<index;
    cout<<endl;
    cout<<"交换后的数组:";
    for(i=0;i<NUM;i++){
        cout<<a[i]<<" ";
    }*/
    //冒泡排序
    /*int array[] = {55, 2, 6, 4, 32, 12, 9, 73, 26, 37};
    int len = sizeof(array) / sizeof(int);
    bubble(array, len);
    for (int i = 0; i < len; i++) {
        cout << array[i] << " ";
    }*/
    /**
     * 17个人，编号 1-17,从一号开始报数，到3的倍数的人离开，一直数下去，真到最后一个人，求此人的编号
     */
    /*const int GAMECOUNT=17;
    const int TICK=3; //报到3的人出局
    int a[17];
    for(int i=0;i<17;i++){
        a[i]=i+1;
        cout<<a[i]<<" ";
    }
    int k=0;  //当前离开的人是 第几个离开
    for(int i=0;k<GAMECOUNT*TICK;i++){
        if(a[i%GAMECOUNT]!=-1){
            k++;
            if(k%TICK==0){
                a[i%GAMECOUNT]=-1;
                cout<<endl<<i%GAMECOUNT+1<<"出局";
                if(k!=GAMECOUNT*TICK){
                    cout<<"新的顺序为:";
                }
                else{
                    cout<<"游戏结束";
                }
                for(int j=0;j<GAMECOUNT;j++){
                    if(a[j]!=-1){
                        cout<<a[j]<<" ";
                    }
                }
            }
        }
    }*/
    /**
     * 输入一个n*n的矩阵，求出两条对角线元素值之和
     */
    /*const int n = 4;
    int m[n][n];
    int i, j;
    cout << "输入矩阵(" << n << "x" << n << "):\n";
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            cin >> m[i][j];
        }
    }
    int sum = 0;
    for (i = 0, j = 0; i < n; i++, j++) {  //对角线相加
        sum += m[i][j];
    }
    for (i = n - 1, j = 0; j < n; i--, j++) {  //对角线相加
        sum += m[i][j];
    }
    cout << "sum=" << sum;*/
    /**
     * 存储:二维数据的存储是按照行的顺序连续存储，即先是第0行元素，再每一行元素，依此类推。
     * 二维数组应用举例
     *     不输入，自动创建数据，并自动形成和输出矩阵
     *     矩阵下三角的元素全是1,即 a[i][j]=1(i=0,1,2,3,4;j=0,1,2,..,i)
     *     上三角:2,3,...,11.若令k的初始值为2,从a[0][1]开始的上三角元素的值用如下的方法得到:
     *      k=2;
     *      a[i][j]=k++;//(i=0,1,2,3;j=i+1,i+2,...,4)
     *
     */
   /* const int N = 5;
    int i, j, k, a[N][N];
    k = 2;
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            if (j <= i) {
                a[i][j] = 1;
            } else {
                a[i][j] = k++;
            }
        }
    }
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }*/
    return 0;
}

/**
 * 冒泡排序
 * @param a
 * @param size
 */
void bubble(int a[], int size) {
    int ex = 0;
    int i, temp;
    for (int pass = 1; pass < size; pass++) {
        ex = 0;
        for (i = 0; i < size - pass; i++) {
            
            if (a[i] > a[i + 1]) {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
                ex = 1;
            }
        }
        if (ex == 0) {
            break;
        }
    }
}
/**
* 插入排序
*/
/**
* 希尔排序
*/
/**
* 其它排序
*/